package com.glq.junit;

import cabine.Cabine;
import ihm.Deplacement;
import systeme.Elevateur;
import ihm.GuiFrame;

import junit.awtui.TestRunner;
import junit.framework.TestCase;

public class ElevateurTestCase extends TestCase {

	int nbEtages = 7; // nombre d'étages
    int hauteurEtage = 3; // hauteur d'un étage en nombre de pas

	public void main(String[] args) {
		TestRunner.run(ElevateurTestCase.class);
	}

	protected void setUp() throws Exception {
		super.setUp();
	}

	protected void tearDown() throws Exception {
		super.tearDown();
	}

	public void testElevateur() {
		Elevateur e = new Elevateur(nbEtages, new GuiFrame( nbEtages, hauteurEtage),new Cabine( nbEtages, 500, hauteurEtage, 4));
		assertNotNull(e);
	}

	public void testGetPlusPetitSuperieur() {
		Elevateur e = new Elevateur(nbEtages, new GuiFrame( nbEtages, hauteurEtage),new Cabine( nbEtages, 500, hauteurEtage, 4));
		e.demander(new Deplacement(2,0));
		e.signalerChangementDEtage();
		e.demander(new Deplacement(4,2));
		e.signalerChangementDEtage();
		e.demander(new Deplacement(2,1));
		e.signalerChangementDEtage();
		e.demander(new Deplacement(4,1));
		e.signalerChangementDEtage();
		e.demander(new Deplacement(3,1));
		e.signalerChangementDEtage();
		assertEquals(2, e.getPlusPetitSuperieur());
	}

	public void testGetPlusPetitInferieur() {
		Elevateur e = new Elevateur(nbEtages, new GuiFrame( nbEtages, hauteurEtage),new Cabine( nbEtages, 500, hauteurEtage, 4));
		e.demander(new Deplacement(2,0));
		e.signalerChangementDEtage();
		e.demander(new Deplacement(2,1));
		e.signalerChangementDEtage();
		e.demander(new Deplacement(3,0));
		e.signalerChangementDEtage();
		e.signalerChangementDEtage();
		e.demander(new Deplacement(4,2));
		assertEquals(2, e.getPlusPetitInferieur());
	}

	public void testArretUrgence() {
		Elevateur e = new Elevateur(nbEtages, new GuiFrame( nbEtages, hauteurEtage),new Cabine( nbEtages, 500, hauteurEtage, 4));
		e.demander(new Deplacement(3,0));
		e.signalerChangementDEtage();
		e.signalerChangementDEtage();
		e.demander(new Deplacement(2,1));
		e.arretUrgence();
		assertEquals(0, e.getLesDeplacements().size());
	}

	public void testViderDeplacements() {
		Elevateur e = new Elevateur(nbEtages, new GuiFrame( nbEtages, hauteurEtage),new Cabine( nbEtages, 500, hauteurEtage, 4));
		e.demander(new Deplacement(4,0));
		e.signalerChangementDEtage();
		e.demander(new Deplacement(2,1));
		e.arretUrgence();
		assertEquals(0, e.getLesDeplacements().size());
	}

	public void testEteindreBoutons() {
		fail("Not yet implemented");
	}

	public void testDemander() {
		Elevateur e = new Elevateur(nbEtages, new GuiFrame( nbEtages, hauteurEtage),new Cabine( nbEtages, 500, hauteurEtage, 4));
		Deplacement d=new Deplacement(4,2);
		e.demander(d);

		assertTrue(e.getLesDeplacements().contains(d));
	}

	public void testSignalerChangementDEtage() {

	}

	public void testSupprimerDeplacement() {
		Elevateur e = new Elevateur(7, new GuiFrame( nbEtages, hauteurEtage),new Cabine( nbEtages, 500, hauteurEtage, 4));
		e.demander(new Deplacement(4,0));
		e.signalerChangementDEtage();
		e.demander(new Deplacement(2,1));
		Deplacement d=e.getLesDeplacements().get(0);

		e.supprimerDeplacement();
		assertFalse(!e.getLesDeplacements().contains(d));

	}

}
